<?php

namespace app\payment\admin;

use app\common\builder\ZBuilder;
use app\payment\model\MerchantInfo as MerchantInfoModel;

/**
 * 商户信息控制器
 */
class MerchantInfo extends Index
{

    protected function initialize()
    {
        parent::initialize();
        if (!in_array(request()->action(), ['index', 'see'])) {
            if ($this->no_auth) {
                $this->error('权限不足！');
            }
        }

        if (in_array(request()->action(), ['add'])) {
            if (!$this->add_safe) {
                $this->error('NO');
            }
        }
        if (in_array(request()->action(), ['edit'])) {
            if (!$this->edit_safe) {
                $this->error('NO');
            }
        }
        if (in_array(request()->action(), ['delete'])) {
            if (!$this->delete_safe) {
                $this->error('NO');
            }
        }
    }

    /**
     * 首页
     * @return mixed
     */
    public function index()
    {
        // 获取查询条件
        $map = $this->getMap();

        $hideCheckbox = false;
        if ($this->no_auth) {
            $map[] = ['id', '=', $this->merchant_id];
            $hideCheckbox = true;
        }
        // 数据列表
        $data_list = MerchantInfoModel::where($map)->order('create_time desc')->paginate();

        // 分页数据
        $page = $data_list->render();
        $items = [
            ['id', '商户号'],
            ['id', '商户名称', 'callback', 'get_user_nickname', 'id'],
            ['business_registration_name', '工商注册名称'],
            ['create_time', '创建时间', 'datetime', '', 'Y-m-d H:i:s'],
            ['update_time', '更新时间', 'datetime', '', 'Y-m-d H:i:s'],
            ['right_button', '操作', 'btn']
        ];
        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->hideCheckbox($hideCheckbox)
            ->setPageTitle('商户信息管理') // 设置页面标题
            ->setTableName('payment_merchant_info') // 设置数据表名
            ->setPrimaryKey('id') // 设置主键名为id
            ->setSearch(['id' => '商户号', 'business_registration_name' => '工商注册名称']) // 设置搜索参数
            ->addColumns($items)
            ->addTopButtons('add,delete') // 批量添加顶部按钮
            ->addRightButton('see', ['title' => '查看', 'icon' => 'fa fa-fw fa-eye', 'href' => url('see', ['id' => '__id__'])], true)
            ->addRightButtons('edit,delete') // 批量添加右侧按钮
            ->setRowList($data_list) // 设置表格数据
            ->setPages($page) // 设置分页数据
            ->fetch(); // 渲染页面
    }

    /**
     * 新增
     * @return mixed
     */
    public function add()
    {
        // 保存数据
        if ($this->request->isPost()) {
            $data = $this->request->post();

            if ($this->merchant_info['trade_pwd'] != md5(md5(md5($data['trade_pwd'])))) {
                $this->error('交易密码不正确！');
            }

            unset($data['trade_pwd']);

            // 验证
            $result = $this->validate($data, 'MerchantInfo');

            // 验证失败 输出错误信息
            if (true !== $result) {
                $this->error($result);
            }

            if ($temp = MerchantInfoModel::create($data)) {
                // 记录行为
                action_log('payment_merchant_info_add', 'payment_merchant_info', $temp['id'], UID, json_encode($temp));
                $this->success('新增成功', url('index'));
            } else {
                $this->error('新增失败');
            }
        }

        $css = <<<EOF
           <style>
                #form_group_jcxx{color:#6699FF;}
                #form_group_fzrxx{color:#6699FF;}
                #form_group_qyjsxx{color:#6699FF;}
           </style>            
EOF;
        $items = [
            ['select', 'id', '商户号', '', MerchantInfoModel::getMerchant()],
            ['static', 'jcxx', '基础信息', '', '', '', ''],
            ['text', 'business_registration_name', '工商注册名称', '比如：北京百度网讯科技有限公司'],
            ['text', 'business_license_registration_number', '营业执照注册号', '比如：110108002734659'],
            ['date', 'term_of_validity_of_business_license', '营业执照有效期', '比如：2021-06-04'],
            ['text', 'permission_number_of_the_opening_bank', '开户行许可核准号', '比如：'],
            ['text', 'tax_registration_number', '税务登记号', '比如：91110000802100433B'],
            ['text', 'organization_code_number', '组织机构代码号', '比如：91110000802100433B'],
            ['text', 'registered_address', '注册地址', '比如：北京市海淀区上地十街10号百度大厦2层'],
            ['text', 'contact_address', '联系地址', '比如：北京市海淀区上地十街10号百度大厦2层'],
            ['text', 'company_website_address', '公司网站地址', '比如：baidu.com'],
            ['text', 'legal_person_name', '法人姓名', '比如：梁志祥'],
            ['text', 'legal_person_identity_card', '法人身份证', '比如：'],
            ['date', 'date_of_validity_of_legal_person_identity_card', '法人身份证有效期', '比如：2033-07-10'],
            ['text', 'legal_person_cell_phone_number', '法人手机号', '比如：13888888888'],
            ['text', 'heavy_business', '偏重业务', '比如：科技推广和应用服务业'],
            ['text', 'customer_service_telephone_numbers', '客服电话', '比如：13888888888'],
            ['text', 'address', '地址', '比如：北京市/海淀区'],
            ['text', 'scope_of_operation', '经营范围', '比如：技术服务、技术培训、技术推广；设计、开发、销售计算机软件；经济信息咨询'],
            ['static', 'fzrxx', '负责人信息', '', '', '', ''],
            ['text', 'name_of_the_person_in_charge', '负责人名称', '比如：梁志祥'],
            ['text', 'mailbox_of_the_person_in_charge', '负责人邮箱', '比如：admin@baidu.com'],
            ['text', 'mobile_phone_number_of_the_person_in_charge', '负责人手机号', '比如：13888888888'],
            ['static', 'qyjsxx', '企业结算信息', '', '', '', ''],
            ['text', 'settlement_account_name', '结算账户户名', '比如：梁志祥'],
            ['text', 'settlement_bank_card_number', '结算银行卡号', '比如：'],
            ['text', 'enterprise_address', '企业地址', '比如：北京市/海淀区'],
            ['text', 'account_opening_bank', '开户银行', '比如：'],
            ['text', 'account_opening_branch', '开户支行', '比如：'],
            ['text', 'settlement_account_number', '结算账户联行号', '比如：'],
            ['text', 'bank_reserved_cell_phone_number', '银行预留手机号', '比如：13888888888'],
            ['password', 'trade_pwd', '交易密码', '6-16位'],
        ];

        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('新增') // 设置页面标题
            ->addFormItems($items)
            ->setExtraCss($css)
            ->fetch();
    }

    /**
     * 编辑
     * @param null $id 商户号id
     * @return mixed
     */
    public function edit($id = null)
    {
        if ($id === null) {
            $this->error('缺少参数！');
        }

        // 保存数据
        if ($this->request->isPost()) {
            $data = $this->request->post();

            if ($this->merchant_info['trade_pwd'] != md5(md5(md5($data['trade_pwd'])))) {
                $this->error('交易密码不正确！');
            }

            unset($data['trade_pwd']);

            // 验证
            $result = $this->validate($data, 'MerchantInfo');
            // 验证失败 输出错误信息
            if (true !== $result) {
                $this->error($result);
            }

            if (MerchantInfoModel::update($data)) {
                $temp = MerchantInfoModel::where(['id' => $data['id']])->find();
                // 记录行为
                action_log('payment_merchant_info_edit', 'payment_merchant_info', $temp['id'], UID, json_encode($temp));
                $this->success('编辑成功', url('index'));
            } else {
                $this->error('编辑失败');
            }
        }
        // 获取数据
        $info = MerchantInfoModel::where('id', $id)->field(true)->find();
        if (!$info) {
            $this->error('不存在！');
        }

        if ($this->no_auth) {
            if ($this->merchant_id != $info['id']) {
                $this->error('参数错误！');
            }
        }

        $css = <<<EOF
           <style>
                #form_group_jcxx{color:#6699FF;}
                #form_group_fzrxx{color:#6699FF;}
                #form_group_qyjsxx{color:#6699FF;}
           </style>            
EOF;

        $items = [
            ['static', 'id', '商户号', '商户名称：' . get_user_nickname($info['id']), $info['id'], $info['id']],
            ['static', 'jcxx', '基础信息', '', '', '', ''],
            ['text', 'business_registration_name', '工商注册名称', '比如：'],
            ['text', 'business_license_registration_number', '营业执照注册号', '比如：'],
            ['date', 'term_of_validity_of_business_license', '营业执照有效期', '比如：'],
            ['text', 'permission_number_of_the_opening_bank', '开户行许可核准号', '比如：'],
            ['text', 'tax_registration_number', '税务登记号', '比如：'],
            ['text', 'organization_code_number', '组织机构代码号', '比如：'],
            ['text', 'registered_address', '注册地址', '比如：'],
            ['text', 'contact_address', '联系地址', '比如：'],
            ['text', 'company_website_address', '公司网站地址', '比如：'],
            ['text', 'legal_person_name', '法人姓名', '比如：'],
            ['text', 'legal_person_identity_card', '法人身份证', '比如：'],
            ['date', 'date_of_validity_of_legal_person_identity_card', '法人身份证有效期', '比如：'],
            ['text', 'legal_person_cell_phone_number', '法人手机号', '比如：'],
            ['text', 'heavy_business', '偏重业务', '比如：移动支付'],
            ['text', 'customer_service_telephone_numbers', '客服电话', '比如：'],
            ['text', 'address', '地址', '比如：'],
            ['text', 'scope_of_operation', '经营范围', '比如：'],
            ['static', 'fzrxx', '负责人信息', '', '', '', ''],
            ['text', 'name_of_the_person_in_charge', '负责人名称', '比如：'],
            ['text', 'mailbox_of_the_person_in_charge', '负责人邮箱', '比如：'],
            ['text', 'mobile_phone_number_of_the_person_in_charge', '负责人手机号', '比如：'],
            ['static', 'qyjsxx', '企业结算信息', '', '', '', ''],
            ['text', 'settlement_account_name', '结算账户户名', '比如：'],
            ['text', 'settlement_bank_card_number', '结算银行卡号', '比如：'],
            ['text', 'enterprise_address', '企业地址', '比如：'],
            ['text', 'account_opening_bank', '开户银行', '比如：'],
            ['text', 'account_opening_branch', '开户支行', '比如：'],
            ['text', 'settlement_account_number', '结算账户联行号', '比如：'],
            ['text', 'bank_reserved_cell_phone_number', '银行预留手机号', '比如：'],
            ['password', 'trade_pwd', '交易密码', '6-16位'],
        ];

        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('编辑') // 设置页面标题
            ->setPageTips("说明：修改商户信息，请勿随便修改。")
            ->addFormItems($items)
            ->setExtraCss($css)
            ->setFormData($info) // 设置表单数据
            ->fetch();
    }

    /**
     * 查看
     * @param null $id 
     * @return mixed
     */
    public function see($id = null)
    {
        if ($id === null) {
            $this->error('缺少参数！');
        }

        // 获取数据
        $info = MerchantInfoModel::where('id', $id)->field(true)->find();
        if (!$info) {
            $this->error('不存在！');
        }

        if ($this->no_auth) {
            if ($this->merchant_id != $info['id']) {
                $this->error('参数错误！');
            }
        }

        $css = <<<EOF
           <style>
                #form_group_jcxx{color:#6699FF;}
                #form_group_fzrxx{color:#6699FF;}
                #form_group_qyjsxx{color:#6699FF;}
           </style>            
EOF;
        $items = [
            ['static', 'id', '商户号', '商户名称：' . get_user_nickname($info['id']), $info['id'], $info['id']],
            ['static', 'jcxx', '基础信息', '', '', '', ''],
            ['static', 'business_registration_name', '工商注册名称', ''],
            ['static', 'business_license_registration_number', '营业执照注册号', ''],
            ['static', 'term_of_validity_of_business_license', '营业执照有效期', ''],
            ['static', 'permission_number_of_the_opening_bank', '开户行许可核准号', ''],
            ['static', 'tax_registration_number', '税务登记号', ''],
            ['static', 'organization_code_number', '组织机构代码号', ''],
            ['static', 'registered_address', '注册地址', ''],
            ['static', 'contact_address', '联系地址', ''],
            ['static', 'company_website_address', '公司网站地址', ''],
            ['static', 'legal_person_name', '法人姓名', ''],
            ['static', 'legal_person_identity_card', '法人身份证', ''],
            ['static', 'date_of_validity_of_legal_person_identity_card', '法人身份证有效期', ''],
            ['static', 'legal_person_cell_phone_number', '法人手机号', ''],
            ['static', 'heavy_business', '偏重业务', ''],
            ['static', 'customer_service_telephone_numbers', '客服电话', ''],
            ['static', 'address', '地址', ''],
            ['static', 'scope_of_operation', '经营范围', ''],
            ['static', 'fzrxx', '负责人信息', '', '', '', ''],
            ['static', 'name_of_the_person_in_charge', '负责人名称', ''],
            ['static', 'mailbox_of_the_person_in_charge', '负责人邮箱', ''],
            ['static', 'mobile_phone_number_of_the_person_in_charge', '负责人手机号', ''],
            ['static', 'qyjsxx', '企业结算信息', '', '', '', ''],
            ['static', 'settlement_account_name', '结算账户户名', ''],
            ['static', 'settlement_bank_card_number', '结算银行卡号', ''],
            ['static', 'enterprise_address', '企业地址', ''],
            ['static', 'account_opening_bank', '开户银行', ''],
            ['static', 'account_opening_branch', '开户支行', ''],
            ['static', 'settlement_account_number', '结算账户联行号', ''],
            ['static', 'bank_reserved_cell_phone_number', '银行预留手机号', ''],
        ];

        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('编辑') // 设置页面标题
            ->setPageTips("说明：商户信息展示。")
            ->addFormItems($items)
            ->hideBtn('submit')
            ->setFormData($info) // 设置表单数据
            ->setExtraCss($css)
            ->fetch();
    }

    /**
     * 删除
     * @param array $record 
     * @return mixed
     */
    public function delete($record = [])
    {
        return $this->setStatus('delete');
    }

    /**
     * 启用
     * @param array $record 
     * @return mixed
     */
    public function enable($record = [])
    {
        return $this->setStatus('enable');
    }

    /**
     * 禁用
     * @param array $record 
     * @return mixed
     */
    public function disable($record = [])
    {
        return $this->setStatus('disable');
    }

    /**
     * 设置状态：删除、禁用、启用
     * @param string $type 类型：delete/enable/disable
     * @param array $record 
     * @return mixed
     */
    public function setStatus($type = '', $record = [])
    {
        $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
        $ids_delete = is_array($ids) ? '' : $ids;
        $data = MerchantInfoModel::where('id', 'in', $ids)->column('id');
        return parent::setStatus($type, ['payment_merchant_info_' . $type, 'payment_merchant_info', $ids_delete, UID, implode('、', $data)]);
    }

    /**
     * 快速编辑
     * @param array $record 行为日志
     * @return mixed
     */
    public function quickEdit($record = [])
    {
        $id = input('post.pk', '');
        $field = input('post.name', '');
        $value = input('post.value', '');
        $data = MerchantInfoModel::where('id', $id)->value($field);
        $details = '字段(' . $field . ')，原值(' . $data . ')，新值：(' . $value . ')';
        return parent::quickEdit(['payment_merchant_info_edit', 'payment_merchant_info', $id, UID, $details]);
    }
}
